package edu.qqilin.springframework.beans.factory.support;

import edu.qqilin.springframework.beans.BeansException;
import edu.qqilin.springframework.beans.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * Description: Bean 实例化策略
 * <p>
 * 定义“怎么 new 一个对象”。
 *
 * @author qqilin1213
 * @version 1.0
 * @date 2025/11/23 14:02
 */
public interface InstantiationStrategy {
    /**
     * Bean 实例化
     * @param beanDefinition Bean定义
     * @param beanName Bean 名称
     * @param ctor Bean 构造器
     * @param args Bean 入参信息
     * @return Bean 实例化对象
     * @throws BeansException
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor, Object[] args) throws BeansException;
}
